﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using GestionComercial.Utils;
using GestionComercial.Model.Entities;
using GestionComercial.Model;

namespace GestionComercial.Data
{
    public class ArticuloData
    {
        OperationResult result;
        Context db = ManagerContext.Contexto;

        public OperationResult Guardar(Articulo _Articulo)
        {
            result = new OperationResult();
            try
            {
                if ((_Articulo.IdArticulo == null) || _Articulo.IdArticulo.Equals(Guid.Empty))
                {
                    _Articulo.IdArticulo = Guid.NewGuid();
                    db.Articulos.Add(_Articulo);
                }
                db.SaveChanges();
                result.Success = true;
                result.Id = _Articulo.IdArticulo;
                return result;
            }
            catch
            {
                result.Msg = "Error al grabar Articulo";
                return result;
            }
        }
        public OperationResult Guardar(Articulo _Articulo, Stock _Stock = null)
        {
            result = new OperationResult();
            try
            {
                //Si el articulo es nuevo, creamos el id y agregamos al contexto
                if ((_Articulo.IdArticulo == null) || _Articulo.IdArticulo.Equals(Guid.Empty))
                {
                    _Articulo.IdArticulo = Guid.NewGuid();
                    db.Articulos.Add(_Articulo);
                }
                //Si se va a controlar Stock, el articulo aun no tiene asignado una entidad stock, creamos y asignamos
                if (((bool)_Articulo.ControlarStock) && (_Articulo.Stock == null))
                {
                    _Stock.IdStock = Guid.NewGuid();
                    _Articulo.IdStock = _Stock.IdStock;
                    _Articulo.Stock = _Stock;
                    db.Stock.Add(_Stock);
                }
                //Si el articulo no controla mas el stock, y tiene asignado un stock, lo borramos
                if (((bool)_Articulo.ControlarStock == false) && (_Articulo.Stock != null))
                {
                    db.Stock.Remove(_Articulo.Stock);
                    _Articulo.IdStock = null;
                    _Articulo.Stock = null;
                    
                }

                _Stock.StockActual = _Stock.StockInicial;
                
                db.SaveChanges();
                result.Success = true;
                result.Id = _Articulo.IdArticulo;
                return result;
            }
            catch(Exception ex)
            { 
                result.Msg = "Error al grabar Articulo";
                System.Console.WriteLine(ex.Message);
                return result;
            }
        }
        public List<Articulo> CargarTodos()
        {
            try
            {
                return db.Articulos.ToList();
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }

        public Articulo CargarPorId(Guid IdArticulo)
        {
            if ((IdArticulo != null) && (!(IdArticulo.Equals(Guid.Empty))))
                return db.Articulos.FirstOrDefault(art => art.IdArticulo == IdArticulo);
            else
                return null;
        }

    }
}
